{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "71ceb47c-c4a5-4939-b4e9-fe672b06a5e4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a0f8f822-992b-4845-ae40-b282456b1bc4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3f4040eb-f8aa-4360-831a-9fca5dc4deaa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2.2.2+cu121'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "28962ed2-5642-44f6-b303-254834ee5c66",
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv('data/income1.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0585e650-8c26-47a9-9a62-bcd6c84db6f4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>Education</th>\n",
       "      <th>Income</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>26.658839</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>10.401338</td>\n",
       "      <td>27.306435</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>10.842809</td>\n",
       "      <td>22.132410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>11.244147</td>\n",
       "      <td>21.169841</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>11.645485</td>\n",
       "      <td>15.192634</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>12.086957</td>\n",
       "      <td>26.398951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>12.488294</td>\n",
       "      <td>17.435307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>12.889632</td>\n",
       "      <td>25.507885</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>13.290970</td>\n",
       "      <td>36.884595</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>13.732441</td>\n",
       "      <td>39.666109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>14.133779</td>\n",
       "      <td>34.396281</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12</td>\n",
       "      <td>14.535117</td>\n",
       "      <td>41.497994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>13</td>\n",
       "      <td>14.976589</td>\n",
       "      <td>44.981575</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>14</td>\n",
       "      <td>15.377926</td>\n",
       "      <td>47.039595</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>15</td>\n",
       "      <td>15.779264</td>\n",
       "      <td>48.252578</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>16</td>\n",
       "      <td>16.220736</td>\n",
       "      <td>57.034251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>17</td>\n",
       "      <td>16.622074</td>\n",
       "      <td>51.490919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>18</td>\n",
       "      <td>17.023411</td>\n",
       "      <td>61.336621</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>19</td>\n",
       "      <td>17.464883</td>\n",
       "      <td>57.581988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>20</td>\n",
       "      <td>17.866221</td>\n",
       "      <td>68.553714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>21</td>\n",
       "      <td>18.267559</td>\n",
       "      <td>64.310925</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>22</td>\n",
       "      <td>18.709030</td>\n",
       "      <td>68.959009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>23</td>\n",
       "      <td>19.110368</td>\n",
       "      <td>74.614639</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>24</td>\n",
       "      <td>19.511706</td>\n",
       "      <td>71.867195</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>25</td>\n",
       "      <td>19.913043</td>\n",
       "      <td>76.098135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>26</td>\n",
       "      <td>20.354515</td>\n",
       "      <td>75.775218</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>27</td>\n",
       "      <td>20.755853</td>\n",
       "      <td>72.486055</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>28</td>\n",
       "      <td>21.157191</td>\n",
       "      <td>77.355021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>29</td>\n",
       "      <td>21.598662</td>\n",
       "      <td>72.118790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>30</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>80.260571</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Unnamed: 0  Education     Income\n",
       "0            1  10.000000  26.658839\n",
       "1            2  10.401338  27.306435\n",
       "2            3  10.842809  22.132410\n",
       "3            4  11.244147  21.169841\n",
       "4            5  11.645485  15.192634\n",
       "5            6  12.086957  26.398951\n",
       "6            7  12.488294  17.435307\n",
       "7            8  12.889632  25.507885\n",
       "8            9  13.290970  36.884595\n",
       "9           10  13.732441  39.666109\n",
       "10          11  14.133779  34.396281\n",
       "11          12  14.535117  41.497994\n",
       "12          13  14.976589  44.981575\n",
       "13          14  15.377926  47.039595\n",
       "14          15  15.779264  48.252578\n",
       "15          16  16.220736  57.034251\n",
       "16          17  16.622074  51.490919\n",
       "17          18  17.023411  61.336621\n",
       "18          19  17.464883  57.581988\n",
       "19          20  17.866221  68.553714\n",
       "20          21  18.267559  64.310925\n",
       "21          22  18.709030  68.959009\n",
       "22          23  19.110368  74.614639\n",
       "23          24  19.511706  71.867195\n",
       "24          25  19.913043  76.098135\n",
       "25          26  20.354515  75.775218\n",
       "26          27  20.755853  72.486055\n",
       "27          28  21.157191  77.355021\n",
       "28          29  21.598662  72.118790\n",
       "29          30  22.000000  80.260571"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "bc190c4d-2031-4365-82b2-cf94668b1481",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>Education</th>\n",
       "      <th>Income</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>26.658839</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>10.401338</td>\n",
       "      <td>27.306435</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>10.842809</td>\n",
       "      <td>22.132410</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>11.244147</td>\n",
       "      <td>21.169841</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>11.645485</td>\n",
       "      <td>15.192634</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0  Education     Income\n",
       "0           1  10.000000  26.658839\n",
       "1           2  10.401338  27.306435\n",
       "2           3  10.842809  22.132410\n",
       "3           4  11.244147  21.169841\n",
       "4           5  11.645485  15.192634"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "cae60f7f-27ad-411e-af3f-b9dbbcbcd767",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>Education</th>\n",
       "      <th>Income</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>29</td>\n",
       "      <td>21.598662</td>\n",
       "      <td>72.118790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>30</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>80.260571</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Unnamed: 0  Education     Income\n",
       "28          29  21.598662  72.118790\n",
       "29          30  22.000000  80.260571"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.tail(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "0fe09987-2eb8-49be-a960-627129907987",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 30 entries, 0 to 29\n",
      "Data columns (total 3 columns):\n",
      " #   Column      Non-Null Count  Dtype  \n",
      "---  ------      --------------  -----  \n",
      " 0   Unnamed: 0  30 non-null     int64  \n",
      " 1   Education   30 non-null     float64\n",
      " 2   Income      30 non-null     float64\n",
      "dtypes: float64(2), int64(1)\n",
      "memory usage: 852.0 bytes\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "5007b770-9924-4e5e-b38a-8502d7216976",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Income')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Q3I6nb2edxh9RR2b8/l82r9/v5KSkuRwhG+DQ6/Xq6ysLO3bt0/Jyclhu2+04nkFj2cVPJ5V8HhWweNZBW8wn5VhGDp06JAyMzMVE9P7SJiob5GJiYnRmDFjBu3+ycnJ/EPvB55X8HhWweNZBY9nFTyeVfAG61kdryWmC4N9AQCAbRFkAACAbRFkQhQfH6+SkhLFx8ebXYot8LyCx7MKHs8qeDyr4PGsgmeFZxX1g30BAED0okUGAADYFkEGAADYFkEGAADYFkEGAADYFkGmD2+99ZYKCwuVmZkph8OhTZs2BZw3DEO33XabMjIylJiYqPz8fO3evducYk12vGfV3t6uW265RVOnTtWIESOUmZmpq6++Wvv37zevYJP19W/raDfccIMcDoceeuihiNVnJcE8qw8//FAXXnihnE6nRowYoTPOOEN79+6NfLEm6+tZffnll1qyZInGjBmjxMRE5eTkaO3ateYUa6LVq1frjDPOUFJSktLS0nTRRRdp165dAde0traquLhYqampGjlypIqKitTc3GxSxebq63kdOHBAS5cu1cSJE5WYmKixY8fqxhtvlMfjGfTaCDJ9OHz4sL7zne/oscce6/H8mjVr9Mgjj2jt2rXavn27RowYoblz56q1tTXClZrveM/qq6++Ul1dnVatWqW6ujq99NJL2rVrly688EITKrWGvv5tddm4caO2bdumzMzMCFVmPX09qz179uicc87RpEmT9Oabb+qDDz7QqlWrlJCQEOFKzdfXs1qxYoUqKytVXl6uDz/8UMuWLdOSJUv0yiuvRLhSc1VXV6u4uFjbtm3Tli1b1N7erjlz5ujw4cP+a5YvX66Kigpt2LBB1dXV2r9/vxYsWGBi1ebp63nt379f+/fv13333af6+no9/fTTqqys1KJFiwa/OANBk2Rs3LjR/97n8xkul8u49957/ccOHjxoxMfHG88995wJFVrHsc+qJ7W1tYYk47PPPotMURbW2/P6y1/+Ynz729826uvrjXHjxhkPPvhgxGuzmp6e1WWXXWYsXLjQnIIsrKdnNWXKFOOXv/xlwLHp06cbv/jFLyJYmfW0tLQYkozq6mrDMDo/y+Pi4owNGzb4r/nwww8NSUZNTY1ZZVrGsc+rJy+++KIxfPhwo729fVBroUVmABobG9XU1KT8/Hz/MafTqTPPPFM1NTUmVmYP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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(data.Education,data.Income)\n",
    "plt.xlabel(\"Edu\")\n",
    "plt.ylabel(\"Income\") "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "58736ceb-a12c-40df-a083-53f79a754656",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = torch.from_numpy(data.Education.values.reshape(-1,1)).type(torch.FloatTensor) # 转成一维向量，然后再转成torch试用tensor\n",
    "Y = torch.from_numpy(data.Income.values.reshape(-1,1)).type(torch.FloatTensor) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "7ef20b88-e257-4724-bcfa-cc2c5cbcd3fa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(torch.Size([30, 1]), torch.Size([30, 1]))"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 只有张量tensor 才有shape方法\n",
    "X.shape,Y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "cbc53917-288e-44d5-bcec-729ce73926a9",
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch import nn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a5d01762-c452-4320-804d-c55cae794429",
   "metadata": {},
   "outputs": [],
   "source": [
    "class EIModule(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.linear = nn.Linear(in_features = 1,out_features=1)\n",
    "    def forward(self,inputs):\n",
    "        logits = self.linear(inputs)\n",
    "        return logits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "cafb15d5-9c6c-4238-8be5-8e2912a4c774",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = EIModule()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "929709f0-0ede-46ef-a2ae-e2c9529a4b82",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "EIModule(\n",
       "  (linear): Linear(in_features=1, out_features=1, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "d2e2454a-5cd6-4e8e-8534-fb602b8f1ee1",
   "metadata": {},
   "outputs": [],
   "source": [
    "loss_fn = nn.MSELoss() # 损失函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "9ed174bb-0209-4257-ad6e-76fa16e2007b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 优化函数,优化谁？ 就是model ; lr 学习速率\n",
    "opt = torch.optim.SGD(model.parameters(),lr=0.0001)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "47727661-e4bf-4179-94dc-0843a0772072",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对模型进行预测\n",
    "# 再对预测结果与实际结果比较，计算损失\n",
    "# 减少损失为优化目标，根据损失优化模型参数\n",
    "for epoch in range(10000): # 调整了训练数量之后线更接近真实了\n",
    "    for x,y in zip(X,Y):\n",
    "        y_pred = model(x)\n",
    "        loss = loss_fn(y_pred,y)\n",
    "        opt.zero_grad()\n",
    "        loss.backward() # 反向传播\n",
    "        opt.step()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "846bf06e-f539-4c84-84cf-f61990e05bef",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Parameter containing:\n",
       " tensor([[5.3548]], requires_grad=True),\n",
       " Parameter containing:\n",
       " tensor([-35.3894], requires_grad=True)]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 训练模型得到线性回归的最佳结果  w*x + b 中的w和b\n",
    "list(model.parameters()) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "d318bf9c-5a7d-47f1-bfbb-e8d37d607709",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('linear.weight',\n",
       "  Parameter containing:\n",
       "  tensor([[5.3548]], requires_grad=True)),\n",
       " ('linear.bias',\n",
       "  Parameter containing:\n",
       "  tensor([-35.3894], requires_grad=True))]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 这里就可以直观的看出来\n",
    "list(model.named_parameters())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "c9870feb-0632-4912-9d9f-8b218ba27990",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1b271245490>]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAGwCAYAAACzXI8XAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABPyElEQVR4nO3deVxU9f7H8deAbC6MYcqSS/xsUVQszYWy5ZYL3rJFW26lWdpmaqllaV0z27RNK0vMMq3UFm9pkYWZmZailqTFpayU1BKwMgc3EJnz++N7IUdBB4Q5M/B+Ph7zuJ0zhzMfz88f8/a7OizLshAREREJQEF2FyAiIiJSWQoyIiIiErAUZERERCRgKciIiIhIwFKQERERkYClICMiIiIBS0FGREREAlYduwuobm63m+3bt9OgQQMcDofd5YiIiIgXLMti9+7dxMXFERRUfrtLjQ8y27dvp1mzZnaXISIiIpWwbds2mjZtWu77NT7INGjQADAPIjIy0uZqRERExBv5+fk0a9as9Hu8PDU+yJR0J0VGRirIiIiIBJhjDQvRYF8REREJWAoyIiIiErAUZERERCRgKciIiIhIwFKQERERkYClICMiIiIBS0FGREREApaCjIiIiAQsBRkREREJWAoyIiIiErAUZERERCRgKciIiIhIwFKQERERkcpxu2HRIltLUJARERGRivv1V+jeHS65BN55x7YyFGRERESkYt59FxITYdkyqFcPDhywrZQ6tn2yiIiIBJY9e+Cuu+DVV83xWWfBvHlw6qm2laQWGRERETm2tWvhzDNNiHE4YOxYWLXK1hADapERERGRoykuhieegPHj4eBBaNYM3ngDzj/f7soABRkREREpz9atMGAArFhhjq++GqZPhxNOsLeuQ6hrSURERI709ttmQO+KFVC/PsyeDW+95VchBtQiIyIiIofavRuGDYPXXzfHXbrA3LnQsqXHZcVui7XZO9mxu4AmDcLpHB9FcJDD5+UqyIiIiIixejVcfz1s3gxBQfDAAzBuHISEeFyWlpnDhNQsclwFpedineGM75NActtYn5Zsa9dScXEx48aNIz4+noiICFq2bMkjjzyCZVml11iWxYMPPkhsbCwRERF0796dn376ycaqRUREapiDB+Hhh6FbNxNiWrSA5cvNuTJCzJA5GR4hBiDXVcCQORmkZeb4snJ7g8wT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LTIiIiISsBRkREREJGApyIiIiEjAUpARERGRgKUgcwwrVqygT58+xMXF4XA4WLhwocf7lmXx4IMPEhsbS0REBN27d+enn36yp1ibHe1ZFRUVcd9999GuXTvq1atHXFwcN9xwA9u3b7evYJsd6+/WoW6//XYcDgfPPvusz+rzJ948q++//55LL70Up9NJvXr16NSpE1u3bvV9sTY71rPas2cPw4YNo2nTpkRERJCQkMD06dPtKdZGEydOpFOnTjRo0IAmTZpw+eWXs3HjRo9rCgoKGDp0KI0aNaJ+/fr069ePvLw8myq217Ge186dOxk+fDinn346ERERNG/enDvvvBOXy1XttSnIHMPevXtp3749L774YpnvP/nkkzz//PNMnz6dNWvWUK9ePXr16kVBQYGPK7Xf0Z7Vvn37yMjIYNy4cWRkZPDee++xceNGLr30Uhsq9Q/H+rtVYsGCBaxevZq4uDgfVeZ/jvWsNm3aRLdu3WjVqhWff/453377LePGjSM8PNzHldrvWM9q1KhRpKWlMWfOHL7//ntGjBjBsGHD+OCDD3xcqb2WL1/O0KFDWb16NUuWLKGoqIiePXuyd+/e0mtGjhxJamoq8+fPZ/ny5Wzfvp2+ffvaWLV9jvW8tm/fzvbt23n66afJzMxk9uzZpKWlMXjw4OovzhKvAdaCBQtKj91utxUTE2M99dRTped27dplhYWFWW+++aYNFfqPw59VWdauXWsB1pYtW3xTlB8r73n9+uuv1kknnWRlZmZaLVq0sKZMmeLz2vxNWc/qmmuusfr3729PQX6srGfVpk0b6+GHH/Y416FDB+uBBx7wYWX+Z8eOHRZgLV++3LIs87s8JCTEmj9/fuk133//vQVY6enpdpXpNw5/XmV55513rNDQUKuoqKhaa1GLzHHIzs4mNzeX7t27l55zOp106dKF9PR0GysLDC6XC4fDQcOGDe0uxS+53W4GDBjA6NGjadOmjd3l+C23282iRYs47bTT6NWrF02aNKFLly5H7aqrzc4++2w++OADfvvtNyzLYtmyZfz444/07NnT7tJsVdIFEhUVBcC6desoKiry+P3eqlUrmjdvrt/vHPm8yrsmMjKSOnWqd1tHBZnjkJubC0B0dLTH+ejo6NL3pGwFBQXcd999XHvttdqUrRxPPPEEderU4c4777S7FL+2Y8cO9uzZw6RJk0hOTuaTTz7hiiuuoG/fvixfvtzu8vzO1KlTSUhIoGnTpoSGhpKcnMyLL77IeeedZ3dptnG73YwYMYJzzjmHtm3bAub3e2ho6BH/0NLv97Kf1+H++OMPHnnkEW699dZqr6fG734t/qeoqIirr74ay7JISUmxuxy/tG7dOp577jkyMjJwOBx2l+PX3G43AJdddhkjR44E4IwzzmDVqlVMnz6d888/387y/M7UqVNZvXo1H3zwAS1atGDFihUMHTqUuLg4j9aH2mTo0KFkZmby5Zdf2l1KQDjW88rPz+fiiy8mISGBhx56qNrrUYvMcYiJiQE4YhR7Xl5e6XviqSTEbNmyhSVLlqg1phxffPEFO3bsoHnz5tSpU4c6deqwZcsW7r77bk4++WS7y/MrJ554InXq1CEhIcHjfOvWrWvlrKWj2b9/P/fffz+TJ0+mT58+JCYmMmzYMK655hqefvppu8uzxbBhw/jwww9ZtmwZTZs2LT0fExPDgQMH2LVrl8f1tf33e3nPq8Tu3btJTk6mQYMGLFiwgJCQkGqvSUHmOMTHxxMTE8PSpUtLz+Xn57NmzRqSkpJsrMw/lYSYn376iU8//ZRGjRrZXZLfGjBgAN9++y3r168vfcXFxTF69GgWL15sd3l+JTQ0lE6dOh0xdfbHH3+kRYsWNlXln4qKiigqKiIoyPNXf3BwcGnLVm1hWRbDhg1jwYIFfPbZZ8THx3u837FjR0JCQjx+v2/cuJGtW7fWyt/vx3peYL7/evbsSWhoKB988IHPZg2qa+kY9uzZw88//1x6nJ2dzfr164mKiqJ58+aMGDGCRx99lFNPPZX4+HjGjRtHXFwcl19+uX1F2+Rozyo2NpYrr7ySjIwMPvzwQ4qLi0v7maOioggNDbWrbNsc6+/W4UEvJCSEmJgYTj/9dF+XartjPavRo0dzzTXXcN555/GPf/yDtLQ0UlNT+fzzz+0r2ibHelbnn38+o0ePJiIighYtWrB8+XJef/11Jk+ebGPVvjd06FDmzZvH+++/T4MGDUp/HzmdTiIiInA6nQwePJhRo0YRFRVFZGQkw4cPJykpia5du9pcve8d63mVhJh9+/YxZ84c8vPzyc/PB6Bx48YEBwdXX3HVOieqBli2bJkFHPEaOHCgZVlmCva4ceOs6OhoKywszLrooousjRs32lu0TY72rLKzs8t8D7CWLVtmd+m2ONbfrcPV5unX3jyrmTNnWqeccooVHh5utW/f3lq4cKF9BdvoWM8qJyfHuvHGG624uDgrPDzcOv30061nnnnGcrvd9hbuY+X9Ppo1a1bpNfv377fuuOMO64QTTrDq1q1rXXHFFVZOTo59RdvoWM+rvL93gJWdnV2ttTn+V6CIiIhIwNEYGREREQlYCjIiIiISsBRkREREJGApyIiIiEjAUpARERGRgKUgIyIiIgFLQUZEREQCloKMiIiIBCwFGREJeA6Hg4ULF9pdhojYQEFGRPzKjTfeiMPhOOKVnJxsd2ki4oe0aaSI+J3k5GRmzZrlcS4sLMymakTEn6lFRkT8TlhYGDExMR6vE044AYCffvqJ8847j/DwcBISEliyZInHz37++ec4HA527dpVem79+vU4HA5++eUXH/4pRMQX1CIjIgHD7XbTt29foqOjWbNmDS6XixEjRthdlojYSEFGRPzOhx9+SP369T3O3X///Zx11ln88MMPLF68mLi4OAAef/xxevfubUeZIuIHFGRExO/84x//ICUlxeNcVFQUb7zxBs2aNSsNMQBJSUm+Lk9E/IiCjIj4nXr16nHKKadU6meDgszQP8uySs8VFRVVSV0i4n802FdEAkbr1q3Ztm0bOTk5pedWr17tcU3jxo0BPK5Zv369T+oTEd9Ti4yI+J3CwkJyc3M9ztWpU4fu3btz2mmnMXDgQJ566iny8/N54IEHPK475ZRTaNasGQ899BCPPfYYP/74I88884wvyxcRH1KLjIj4nbS0NGJjYz1e3bp1IygoiAULFrB//346d+7MzTffzGOPPebxsyEhIbz55pv88MMPJCYm8sQTT/Doo4/a9CcRkermsA7tSBYREREJIGqRERERkYClICMiIiIBS0FGREREApaCjIiIiAQsBRkREREJWAoyIiIiErAUZERERCRgKciIiIhIwFKQERERkYClICMiIiIBS0FGREREAtb/A9U62JcQfcCGAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(data.Education,data.Income)\n",
    "plt.xlabel(\"Edu\")\n",
    "plt.ylabel(\"Income\")\n",
    "\n",
    "plt.plot(X,model(X).detach().numpy(),c='r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3d5da933-d25d-4436-a540-99feec348be3",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
